package com.kll.tv.views.ui;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;

import com.kll.tv.R;
import com.kll.tv.databinding.ZlDialogAlertBinding;
import com.kll.tv.views.ui.listener.AlertDialogEnum;
import com.kll.tv.views.ui.listener.AlertDialogTypeEnum;
import com.kll.tv.views.ui.listener.OnDialogClickListener;

/**
 * 一个自定义的弹出框
 * 1、支持按钮选择性展示（比如修改按钮展示名称，只展示部分按钮）
 * 2、支持修改标题，修改展示内容
 * 3、支持设置弹出框样式（提示模式，编辑模式，自定义模式）
 */
public class AlertDialog extends Dialog implements View.OnClickListener {

	private Context context;

	private ZlDialogAlertBinding binding;

	/** 弹窗类型，默认为提示 */
    private AlertDialogEnum type = AlertDialogEnum.TIP;
	private OnDialogClickListener listener;

    private AlertDialog(Context context) {
        super(context, R.style.ViewsDialog);
        getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);
        initUI(context);
    }

    /**
     * 创建一个弹出框实例
     * @param context 上下文
     * @param title 标题
     * @param message 显示内容
     * @return 弹出框实例
     */
    public static AlertDialog createTip(Context context, String title, String message){

        AlertDialog alertDialog = new AlertDialog(context);

        View view = LayoutInflater.from(context).inflate(R.layout.zl_dialog_alert, null);
        alertDialog.setContentView(view);

        alertDialog.binding = ZlDialogAlertBinding.bind(view);
        alertDialog.binding.tvOk.setOnClickListener(v->alertDialog.onClick(v));
        alertDialog.binding.tvCancel.setOnClickListener(v->alertDialog.onClick(v));
//        ButterKnife.bind(alertDialog);

        alertDialog.setType(AlertDialogEnum.TIP);
        alertDialog.setTitle(title);
        alertDialog.setMessage(message);
        return alertDialog;
    }

    /**
     * 创建一个自定义布局
     * @param context 上下文
     * @return
     */
    public static AlertDialog createCustom(Context context, View view){
        AlertDialog alertDialog = new AlertDialog(context);
        alertDialog.setContentView(view);
        alertDialog.setType(AlertDialogEnum.CUSTOM);
        return alertDialog;
    }

    /**
     * 设置按钮
     * @param submitStr 提交按钮名称
     * @param cancelStr 取消按钮名称
     * @return 弹出框实例
     */
    public AlertDialog setButton(String submitStr, String cancelStr) {
        binding.tvOk.setText(submitStr);
        binding.tvCancel.setText(cancelStr);
        return this;
    }

    public void setType(AlertDialogEnum type) {
        this.type = type;
    }


    /**
     * 设置按钮监听
     * @param listener 监听类
     * @return 本实例对象
     */
    public AlertDialog setOnClickListener(OnDialogClickListener listener) {
        this.listener = listener;
        return this;
    }

	/***
	 * @detail init UI
	 */
	private void initUI(Context context) {
		this.context = context;
		this.setCanceledOnTouchOutside(false);
	}


    public void show() {
        super.show();
    }

	//--------------------------------------------------------------
    /**
     * 设置弹出框标题
     * @param title 标题字符
     */
	private void setTitle(String title) {
		binding.tvTitle.setText(title);
	}

    /**
     * 设置弹出框类型
     * @param message 显示内容
     */
	private void setMessage(String message) {
		switch(type){
		case TIP:
			binding.tvMessage.setVisibility(View.VISIBLE);
            binding.tvMessage.setText(message);
			break;
		case CUSTOM:
			break;
		}

        binding.tvMessage.setText(message);
	}


	@Override
	public void onClick(View view) {

        dismiss();

        int i = view.getId();
        if (i == R.id.tv_ok) {
            listener.click(AlertDialogTypeEnum.OK, view);
        } else if (i == R.id.tv_cancel) {
            listener.click(AlertDialogTypeEnum.CANCEL, view);
        }
	}
}
